import { reqGetHbFromQy } from '@/api/scene';
import { wxLogin, authUser } from '@/api/login';
import { setToken } from '@/utils/storage';
const app = getApp();
let reLoginCount = 0;
const MAX_RELOGIN_COUNT = 3;

Component({
  properties: {},
  data: {
    isShow: false, // 控制红包弹窗创建
    isHbShow: false, // 控制红包显示
    isHbAniShow: false, // 控制红包显示动画播放
    finishShow: false, // 所有显示红包要做的事都做完了
    isHbOpen: false, // 控制红包拆开动画播放
    hasOpen: false, // 是否红包已经被拆开了
    hbShowAniTime: '',
    hbInfo: {
      theme: '',
      money: 0,
      rule: '',
    },
  },
  methods: {
    // 显示红包的main方法
    async showHbMain() {
      // 加载红包，然后图片opacity由0变为1，显示红包
      await this.loadHbThenShow(500);
      // 红包已经拆开了 不需要播放出现动画
      if (this.data.hasOpen) {
        return;
      }
      // 播放红包出现动画
      this.playShowHbAni(500);
    },
    async playShowHbAni(playTime) {
      return new Promise((resolve) => {
        const playTimeStr = `${playTime / 1000}s`;
        this.setData({
          hbShowAniTime: playTimeStr,
          isHbAniShow: true,
        });
        setTimeout(() => {
          resolve();
        }, playTime);
      });
    },
    loadHbThenShow(waitTime) {
      return new Promise((resolve) => {
        // 留一点时间给图片加载，等图片加载好了再显示红包
        setTimeout(() => {
          this.setData({
            isHbShow: true,
          });
          resolve();
        }, waitTime);
      });
    },
    // 拆开红包
    async openHb() {
      try {
        wx.showLoading({
          title: '领取中...',
          icon: 'loading',
          mask: true,
        });
        await this.playOpenHbAni();
        this.setData({
          hasOpen: true,
        });
        wx.hideLoading();
      } catch (err) {
        console.log(err);
        wx.hideLoading();
        wx.showToast({
          title: '领取失败',
          icon: 'error',
        });
        if (err === '401') {
          // 重新登录
          this.reLogin(this.openHb);
        }
      }

      // await this.playOpenHbAni();
      // console.log('红包已拆开，可以做些其他事情');
    },
    // 重新登录
    async reLogin(reTask) {
      if (reLoginCount >= MAX_RELOGIN_COUNT) {
        wx.showToast({
          title: '登录失败，请稍后再试',
          icon: 'error',
        });
        return;
      }
      wx.showLoading({
        title: '重新登录中...',
        icon: 'loading',
      });
      reLoginCount++;
      const { code } = await wxLogin();
      const authInfo = await authUser({ code });
      wx.hideLoading();
      // 没有绑定手机号的情况
      if (authInfo.token === '0') {
        // 关闭弹窗
        this.close();
        //缓存openid
        app.globalData.openId = authInfo.wx_openid;
        wx.setStorageSync('openId', authInfo.wx_openid);
        wx.navigateTo({ url: '/pages/regist/regist' });
      } else if (authInfo.token) {
        setToken(authInfo.token);
        reTask.call(this);
      } else {
        wx.showToast({
          title: '登录失败',
          icon: 'error',
        });
      }
    },
    // 处理红包数据
    handleGetHbRes(hbList) {
      if (!hbList) {
        // 红包不存在则空操作
        return;
      }
      if (hbList.length === 1) {
        const hbInfo = hbList[0];
        this.setData({
          'hbInfo.theme': hbInfo.theme,
          'hbInfo.money': hbInfo.bonus,
          'hbInfo.rule': hbInfo.depict,
        });
      } else if (hbList.length > 1) {
        const hbInfo = hbList[0];
        // const money = hbList.reduce((acc, cur) => acc + parseInt(cur.bonus), 0);
        this.setData({
          'hbInfo.theme': hbInfo.theme,
          'hbInfo.money': hbInfo.bonus,
          'hbInfo.rule': hbInfo.depict,
        });
      }
    },
    // 播放红包拆开动画
    playOpenHbAni() {
      return new Promise((resolve) => {
        this.setData({
          isHbOpen: true,
        });
        setTimeout(() => {
          resolve();
        }, 300);
      });
    },
    /** 显示弹窗 */
    async open() {
      const res = await reqGetHbFromQy();
      this.handleGetHbRes(res.data);
      // 有红包可领
      if (this.data.hbInfo.money) {
        // 创建弹窗
        this.setData({
          isShow: true,
        });
        // 显示红包
        this.showHbMain();
      } else {
        // 没有红包可领直接跳转红包列表
        this.toHbList();
      }
    },
    /** 关闭弹窗 */
    close() {
      this.setData({
        isShow: false,
      });
    },
    toHbList() {
      app.globalData.hbtype = '2';
      this.close();
      wx.switchTab({
        url: '/pages/hb/hb',
      });
    },
    closeFromShade(e) {
      this.close();
    },
    emptyHandle() {},
  },
});
